<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>extends 扩展</title>
    <script src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>extends 扩展</h1>
    <hr/>
    <div id="app">
        {{num}}
        <!--调用的是原生构造器中methods中的方法-->
        <p><button @click="add">add</button></p>
        <!--调用的是扩展methods中的方法-->
        <p><button @click="add2">add2</button></p>
    </div>

    <script>

        /*
            添加了扩展之后,
            会先执行原生的methods中的方法/或者扩展中的methods中的方法
            如果methods中的方法和扩展中的方法冲突,只会执行原生的methods中的方法
            然后执行扩展中的生命周期钩子函数
            最后执行原生的生命周期中的钩子函数
        */
        var extendsUpdated = {
           updated: function(){
               console.log('我是扩展的update方法')
           },
           methods: {
               add: function(){
                   console.log('我是扩展methods中的add方法')
               },
               add2: function(){
                   console.log('我是扩展methods中的add2方法')
                   this.num++;
               }
           }
       }

        var app = new Vue({
            el: '#app',
            data: {
                num: 1
            },
            methods:{
                add: function(){
                    console.log("我是原生methods中的add方法")
                    this.num++;
                }
            },
            updated: function(){
                console.log("我是原生生命周期的update方法")
            },
            //注册扩展到构造器中,只能注册一个扩展
            extends: extendsUpdated
        });
    </script>

</body>
</html>